package web.interceptors;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class InterceptorDemo3 implements HandlerInterceptor {

    /**
     * 在目标处理器之前生效
     * @param request  请求
     * @param response 响应
     * @param handler 处理器
     * @return 返回true，表示放行；返回false，表示不放行
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        System.out.println("InterceptorDemo3 preHandle");

        return true;
    }

    /**
     * 在目标处理器方法正常执行完成后执行
     * @param request 请求
     * @param response  响应
     * @param handler 处理器方法
     * @param modelAndView 处理器结果的结果
     * @throws Exception
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("InterceptorDemo3 postHandle");
    }

    /**
     * 相当于finally中的代码，不管处理器方法是正常执行完，还是异常执行完，这个方法都会执行
     *  如果有多个拦截器，只要preHandle返回值为true，这个方法都会执行
     *
     *  interceptor1   preHandle-true  postHandle --不执行    afterCompletion -- 会执行
     *  interceptor2   preHandle-true  postHandle --不执行   afterCompletion -- 会执行
     *  interceptor3   preHandle-false  postHandle --不执行   afterCompletion -- 不执行
     *
     *  目标处理器方法 -- 不执行
     *
     * @param request 请求
     * @param response 响应
     * @param handler 处理器方法
     * @param ex
     * @throws Exception  如果处理器出现异常，表示处理器的异常对象
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("InterceptorDemo3 afterCompletion");
    }
}
